\documentclass{article} 
\usepackage{geometry}
\geometry{verbose,a4paper,tmargin=2cm,bmargin=2cm,lmargin=2cm,rmargin=2cm}
\usepackage{tikz}
\usetikzlibrary{arrows,decorations.pathmorphing,positioning,backgrounds,chains,fit,calc,%
petri,through,shapes}
\usepackage{amssymb}
\usepackage[nofonts]{ctex}
\setCJKmainfont{WenQuanYi Micro Hei}
\begin{document}
\begin{tikzpicture}[
	node distance=5mm,
	startend/.style={rectangle,minimum size=6mm,
			very thick,draw=black!50,
			top color=white,bottom color=black!20},
	startend/.append style={rectangle,rounded corners=3mm},
	block/.style={rectangle,minimum size=6mm,rounded corners=3mm,
                      very thick, draw=red!50!black!50,         
		      top color=white,bottom color=red!50!black!20},
	panduan/.style={shape aspect=2,diamond,
	 		very thick,draw=blue!50,
			top color=white,bottom color=blue!20},
        line/.style={->,shorten >=1pt,>=stealth',thick},
	hv path/.style={to path={-| (\tikztotarget)}},
	vh path/.style={to path={|- (\tikztotarget)}},
	v loop/.style={to path={-- ++(0,#1) -| (\tikztotarget)}},
	h loop/.style={to path={-- ++(#1,0) |- (\tikztotarget)}},
	every join/.style={rounded corners},
	every label/.style={red}]
	\node [startend] (start) {开始};
	\node [block] (signal) [below=of start] {生成白粉红噪声};
	\node [block] (frf1) [below=of signal] {测量频率响应函数($H_1$)};
	\node [panduan] (frfok) [below=of frf1] {$FRF$ OK?};
	\node [block,text width=3cm] (drive) [below=of frfok] {更新驱动信号:\\
		 $\bullet\ FRF^{-1}\times$ 目标谱\\
		 $\bullet$ 随机相位};
	\node [block] (target) [right=of drive] {目标谱};
	\node [block] (coh) [left=of drive] {基于相关函数的$FRF$更新};
	\node [block] (frf2) [below=of drive] {测量频率响应函数($H_1$)};
	\node [panduan] (update) [below=of frf2] {更新 $FRF$ ?};
	\node [startend] (end) [below=of update] {结束};
	\path (start) edge [line] (signal)
	      (signal) edge [line] (frf1)
	      (frf1) edge [line] (frfok)
	      (frfok) edge [line] (drive)
	      (drive) edge [line] (frf2)
	      (frf2) edge [line] (update)
	      (update) edge [line] (end)
	      (target) edge [line] (drive)
	      (frfok.east) edge [every join,line,h loop=3cm] (end.east)
	      (update.west) edge [line,hv path,every join] (coh)
	      (coh) edge [line,vh path,every join] (frfok);
	\coordinate [label=left:NO] (a) at ($ (frfok)!0.5!(drive) $);
	\coordinate [label=above:YES] (b) at ($ (frfok)+(2cm,0)$);
	\coordinate [label=above:YES] (c) at ($ (update)+(-2.5cm,0)$);
	\coordinate [label=above:YES] (b) at ($ (end)+(1.5cm,0)$);
\end{tikzpicture}

\end{document}
